//
//  JSViewController32.swift
//  RXSwiftTest
//
//  Created by ZhangBo on 2019/4/20.
//  Copyright © 2019 ZhangBo. All rights reserved.
//

import UIKit
import RxSwift
import RxCocoa
import RxDataSources

class JSViewController32: UIViewController {

    //表格
    var tableView: UITableView!
    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()
        let refreshButton = UIBarButtonItem.init(title: "刷新", style: .done, target: self, action: nil)
        self.navigationItem.rightBarButtonItem = refreshButton

        //创建表格视图
        self.tableView = UITableView(frame: self.view.frame, style: .plain)
        //创建一个重用的单元格
        self.tableView!.register(UITableViewCell.self,
            forCellReuseIdentifier: "Cell")
        self.view.addSubview(self.tableView!)

        //随机的表格数据
        let randomResult = refreshButton.rx.tap.asObservable()
            .startWith(()) //加这个为了让一开始就能自动请求一次数据
            .flatMapLatest(getRandomResult)
            .share(replay: 1)

        //创建数据源
        let dataSource = RxTableViewSectionedReloadDataSource
        <SectionModel<String, Int>>(configureCell: {
            (dataSource, tv, indexPath, element) in
            let cell = tv.dequeueReusableCell(withIdentifier: "Cell")!
            cell.textLabel?.text = "条目\(indexPath.row)：\(element)"
            return cell
        })

        //绑定单元格数据
        randomResult.bind(to: tableView.rx.items(dataSource: dataSource)).disposed(by: disposeBag)
    }


    //获取随机数据
    func getRandomResult() -> Observable<[SectionModel<String, Int>]> {
        print("正在请求数据......")
        let items = (0..<5).map { _ in
            Int(arc4random())
        }
        let observable = Observable.just([SectionModel(model: "S", items: items)])
        return observable
        return observable.delay(2, scheduler: MainScheduler.instance)
    }

}

/* （1）flatMapLatest 的作用是当在短时间内（上一个请求还没回来）连续点击多次“刷新”按钮，
虽然仍会发起多次请求，但表格只会接收并显示最后一次请求。
避免表格出现连续刷新的现象。*/
